home *** CD-ROM | disk | FTP | other *** search
- /*
- ** LTOA.C
- **
- ** Converts a long integer to a string.
- **
- ** Copyright 1988-90 by Robert B. Stout dba MicroFirm
- **
- ** Released to public domain, 1991
- **
- ** Parameters: 1 - number to be converted
- ** 2 - buffer in which to build the converted string
- ** 3 - number base to use for conversion
- **
- ** Returns: A character pointer to the converted string if
- ** successful, a NULL pointer if the number base specified
- ** is out of range.
- */
-
- #include <stdlib.h>
- #include <string.h>
-
- #define BUFSIZE (sizeof(long) * 8 + 1)
-
- char *ltoa(long N, char *str, int base)
- {
- register int i = 2;
- long uarg;
- char *tail, *head = str, buf[BUFSIZE];
-
- if (36 < base || 2 > base)
- base = 10; /* can only use 0-9, A-Z */
- tail = &buf[BUFSIZE - 1]; /* last character position */
- *tail-- = '\0';
-
- if (10 == base && N < 0L)
- {
- *head++ = '-';
- uarg = -N;
- }
- else uarg = N;
-
- if (uarg)
- {
- for (i = 1; uarg; ++i)
- {
- register ldiv_t r;
-
- r = ldiv(uarg, base);
- *tail-- = (char)(r.rem + ((9L < r.rem) ?
- ('A' - 10L) : '0'));
- uarg = r.quot;
- }
- }
- else *tail-- = '0';
-
- memcpy(head, ++tail, i);
- return str;
- }
-